package com.en.sharing.floats;

/**
 * Kahan Summation 算法
 * 在每次的计算过程中，都用一次减法，把当前加法计算中损失的精度记录下来，
 * 然后在后面的循环中，把这个精度损失放在要加的小数上，再做一次运算
 *
 * @author 付晓飞
 * @date 2024/3/13 7:35 下午
 */
public class KahanSummation {

    public static void main(String[] args) {
        float sum = 0.0f;
        float c = 0.0f;
        for (int i = 0; i < 20000000; i++) {
            float x = 1.0f;
            float y = x - c;
            float t = sum + y;
            c = (t - sum) - y;
            sum = t;
        }
        System.out.println("sum is " + sum);
    }

}
